package hDOJ;

/*

1
2


3
6

---
1 ==> 3
2 ==> 6
3 ==> rpg 6
4 ==> rprg,rprp,rpgp,rgpg,rgrg,rgrp
3*2*1*2(当倒数第二个和第一个相同时)+3*2*1*1(当倒数第二个和第一个不同相同时) = 3*2*1*3 = 18
5 ==> rpgpg,rpgrg,rpgrp,rgpgp,rgprg,rgprp,rprgp,rprpg,rgrgp,rgrpg
3*2*2*1*2 + 3*2*2*1*1 = 36
公式只适用于n=4的情况，因为这个情况中第n-2就是第2，默认不等于第一个。还是把问题看得太简单了
，如果第n-1和第一个相同，那么第n-2就不能和第1个相同了，但我们的算法中没有约束第n-2个。
如果我们想约束第n-2个，那么又得看第n-3是否和第1个相同，相同则第n-2个有两种，不相同则一种
问题变得很复杂，奔溃。

正确公式：an = (an-1) + 2*(an-2)
这个公式的推理逻辑也是从第n-1个格子下手，看是否和第一个相同，我没有发现其中的递推关系
1，相同，第n个有2种，第n-1个确定了和第一个相同,那么第n-2个则和第一个不相同，所以从第一个到第n-2个的涂法数就是an-2
也就是说先确定前n-2个，涂法数为an-2,再确定第n-1个为1种和第n个为两种,即为2 * an-2
2，不相同，从第一个到第n-1种涂法数为an-1,剩下第n个就1种,即为1 * an-1
 */


import java.util.Scanner;

public class Main2045 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()) {
            int N = sc.nextInt();
            long[] arr = new long[51];
            arr[0] = 3;
            arr[1] = 6;
            arr[2] = 6;
            for(int i = 3; i < N; i++) {
                arr[i] = arr[i-1] + 2*arr[i-2];
            }System.out.println(arr[N-1]);
        }
    }

}
